Only reject air for pathfinding bounds, not pathable tiles without floors #65720
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Bugfixes "Stairs doesn't block pathfinding for some purposes (e.g. crafting pickup range)"
Purpose of change
Describe the solution
map::has_floor_or_support always returns false if going downwards is a valid move. Going downwards on stairs is a valid move, but not the only move. Therefore we need to check something more sane, like map::is_open_air.
There shouldn't be any scenarios where you can go downwards (map::has_floor_or_support returns true) that doesn't also return true for map::is_open_air, except for stairs.
Describe alternatives you've considered
I originally did this by checking map::passable and then realized that open air is, technically speaking, passable. Soooo that didn't work.
Testing
Compiled locally and confirmed I could find crafting components through the stairs. Debugged a new scenario(image below) where I was separated from components by air, confirmed I could not access them.
Additional context
map::has_floor_or_support is a very sussy name and a very sussy function.
This bug report came from 0.G so if this fix is acceptable it may be desirable to also backport it.